package com.jt.controller;

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import sun.misc.Request;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;

//Controller
//@ResponseBody//类中的方法返回的数据都是JSON

@RestController  //Controller+@ResponseBody  由公共的注解抽取而来
@RequestMapping("/user")//将公共的前缀抽取写在类上


public class UserController {
    /**
     * URL:http://localhost:8080/user/findUser?id=100&name=tomcat
     * 类型：get请求
     * 返回值 String id ：name
     * */

    /**
     * 1.Servlet-request对象/response对象
     * 2.Servlet中如何取值：对象.getParameter()
     *
     * */
    @RequestMapping("/findUser")

    public String findUser(HttpServletRequest request,
                           HttpServletResponse response){
        String id = request.getParameter("id");
        int intId = Integer.parseInt(id);
        String name = request.getParameter("name");
        return intId + ":" +name;
    }

    /**
     *  URL:http://localhost:8080/user/findUser2?id=100&name=tomcat
     *  规则：SpringMVC中的参数名称，必须与传递参数名称一致
     *  原理：参数传参
     *      SpringMVC在内部将Servlet的取值方式包装，
     *    用户只需填写参数，即可以获取数据
     * */
    @RequestMapping("/findUser2")

    public String findUser2(Integer id,String name){

        return id + ":" +name;
    }

    /**
     * URL:http://localhost:8080/user/getUser?id=1&name=李四&age=18
     * 返回值：user对象
     * 知识点：对象传参
     *    1.当遇到多个参数时，可以使用对象封装
     *    2.要求对象的属性必须与参数名称一致，同时必须有set/get方法
     *      SpringMVC会自动的将参数赋值给对象的属性
     *
     * */
    @RequestMapping("/getUser")
    public User getUser(User user){
        return user;
    }


    /**
     * 动态接收参数
     *  URL:http://localhost:8080/user/restFul/1/张三
     *  难点：需要从url的路径中获取参数！！
     *  返回值：User对象
     * 语法：
     *    1.服务器段参数接收时，变量使用{XX}进行包裹，并且位置固定
     *    2.利用@PathVariable注解，动态获取路径中的数据，要求名称！必须比配
     * */
    @RequestMapping("/restFul/{id}/{name}")
    public User restFul(@PathVariable Integer id,
                        @PathVariable String name){
        User user = new User();
        user.setId(id);
        user.setName(name);
        return user;
    }

    /**
     * RestFul规则：
     *   如果对象的属性与{key}相同,则可以适用对象接收
     *  用途：restful结构，一般用于更新操作
     * */
//    @RequestMapping(value = "/restFul2/{id}/{name}/{age}",method = RequestMethod.GET)
    @GetMapping("/restFul2/{id}/{name}/{age}")
    public User restFul2( User user){

        return user;
    }
}


